Compute Optimizer の推奨事項をS3バケットにエクスポートする【Organizations版】

Compute Optimizer の推奨事項をS3バケットにエクスポートする【Organizations版】

Clock Icon2024.12.05

Compute Optimizer はコンピューティングリソースについて 「適切なインスタンスタイプやストレージ」を 提案してくれるサービスです。

Compute Optimizer による推奨事項は S3バケットにエクスポート可能です。 推奨事項のタイプ(EC2やRDS, EBSなど)ごとにCSV出力できます。

https://docs.aws.amazon.com/compute-optimizer/latest/ug/exporting-recommendations.html

今回は Compute Optimizer のS3出力を実際に試してみます。 出力準備としてS3バケットの準備と、 実際の出力(マネジメントコンソール,AWS CLI)を実施します。

前提

Compute Optimizer 有効化は完了している前提です。 有効化方法については以下公式ドキュメントを参照ください。

https://docs.aws.amazon.com/compute-optimizer/latest/ug/getting-started.html

また、今回は Organizations 利用環境での出力を試します。 すでに Organizations 連携を有効化しており、 委任管理者も設定済みの前提で進めます。 委任については以下ブログを参照ください。

https://dev.classmethod.jp/articles/aws-compute-optimizer-design-account/

S3バケットを準備する

委任管理者アカウント上にS3バケットを作成します。

Compute Optimizer から S3バケットにエクスポートができるように、 バケットポリシーを適用します。

以下バケットポリシー例です。 ※ ${S3バケット名} および ${組織ID} を置き換えてください。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "compute-optimizer.amazonaws.com"
      },
      "Action": "s3:GetBucketAcl",
      "Resource": "arn:aws:s3:::${S3バケット名}"
    },
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "compute-optimizer.amazonaws.com"
      },
      "Action": "s3:GetBucketPolicyStatus",
      "Resource": "arn:aws:s3:::${S3バケット名}"
    },
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "compute-optimizer.amazonaws.com"
      },
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::${S3バケット名}/*",
      "Condition": {
        "StringEquals": {
          "s3:x-amz-acl": "bucket-owner-full-control",
          "aws:SourceOrgID": "${組織ID}"
        }
      }
    }
  ]
}

マネジメントコンソールからエクスポートジョブを作成する

今回は2024/11のアップデートで利用可能になった アイドルリソースに関する推奨事項を S3にエクスポートしてみます。

Compute Optimizer のコンソールへアクセスして、 [エクスポート] 画面に遷移します。 [レコメンデーションをエクスポート] を選択します。

sc_2024-12-04_04-30-00_24297

エクスポート先の設定として、先程のS3バケットを選択します。 オプションでオブジェクトプレフィックスを指定できます。

sc_2024-12-04_04-34-23_11769

組織内のすべてのメンバーアカウントの推奨事項を含めます。 にチェックを入れます。 Recommendation type を Idle recommendations にします。

sc_2024-12-04_04-35-09_7777

出力に含める列はとりあえず全て選択して、 [エクスポート] を実行しましょう。

sc_2024-12-04_04-36-14_8748

キューに入れられたエクスポートジョブが「完了」になればOKです。

sc_2024-12-04_04-44-20_28750

確認する

S3オブジェクトがある場所は ${S3バケット}/${指定したプレフィクス}/compute-optimizer/${AWSアカウントID}/ です。 「本体のCSV」と、「メタデータ(カラム名など)情報のJSON」 の2つが出力されます。

sc_2024-12-04_04-48-53_22164

以下はCSVを見やすく整理したものです。(列名を日本語化 + 特定列のみ表記)

sc_2024-12-04_04-43-05_2126

AWS CLIからエクスポートジョブを作成する

「エクスポートジョブを定期的に実行する機能」は 純粋な機能としてサポートされていません。

そのため、今後の自動化を見据えて API(AWS CLI)によるエクスポートジョブ実行を試してみます。

AWS CLI では推奨事項の種類ごとにコマンドが用意されています。

例えば、先程の「アイドルリソースに関する推奨事項」エクスポートを AWS CLI で実施する場合は、以下のようなコマンドを実行します。

aws compute-optimizer export-idle-recommendations \
  --region ap-northeast-1 --output yaml \
  --include-member-accounts \
  --s3-destination-config bucket="${S3バケット名}",keyPrefix="idle-recommendations" \
  --file-format Csv \
  --fields-to-export \
AccountId \
ResourceArn \
ResourceId \
ResourceType \
LastRefreshTimestamp \
LookbackPeriodInDays \
SavingsOpportunity \
SavingsOpportunityAfterDiscount \
UtilizationMetricsCpuMaximum \
UtilizationMetricsMemoryMaximum \
UtilizationMetricsNetworkOutBytesPerSecondMaximum \
UtilizationMetricsNetworkInBytesPerSecondMaximum \
UtilizationMetricsDatabaseConnectionsMaximum \
UtilizationMetricsEBSVolumeReadIOPSMaximum \
UtilizationMetricsEBSVolumeWriteIOPSMaximum \
UtilizationMetricsVolumeReadOpsPerSecondMaximum \
UtilizationMetricsVolumeWriteOpsPerSecondMaximum \
Finding \
FindingDescription \
Tags

# ----- ↓ 出力サンプル -----
# jobId: 0062df5c-e4d8-4571-a206-example
# s3Destination:
#   bucket: ${S3バケット名}
#   key: idle-recommendations/compute-optimizer/123456789012/ap-northeast-1-2024-12-03T200842Z-0062df5c-e4d8-4571-a206-example.csv
#   metadataKey: idle-recommendations/compute-optimizer/123456789012/ap-northeast-1-2024-12-03T200842Z-0062df5c-e4d8-4571-a206-example-metadata.json

おわりに

Compute Optimizer の推奨事項をS3バケットにエクスポートしてみました。

Cost Optimization Hub のように日次エクスポートなどの機能は 標準で用意されていません。 そのためLambda や EventBridge を活用して、 定期的にS3へ出力する仕組みは有用です。 コスト最適化に関するダッシュボードを 継続的に運用していく際には検討したいです。

以上、参考になれば幸いです。

参考

https://docs.aws.amazon.com/compute-optimizer/latest/ug/create-s3-bucket-policy-for-compute-optimizer.html

https://docs.aws.amazon.com/compute-optimizer/latest/ug/exporting-your-recommendations.html

https://docs.aws.amazon.com/compute-optimizer/latest/ug/exported-files.html

https://awscli.amazonaws.com/v2/documentation/api/latest/reference/compute-optimizer/index.html

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.